/**
  @(#)$Id: AL_String.h 69 2013-10-08 03:03:33Z xiaoting $
  @brief    	AL_String: define a new String class

  @author		$Author: xiaoting $
  @date			$Date: 2013-10-08 11:03:33 +0800 (周二, 08 十月 2013) $
  @version		$Revision: 69 $
  @url			$URL: https://svn.code.sf.net/p/xiaoting/game/trunk/MyProject/AL_StandardLib/groupinc/AL_String.h $
  @header		$Header: https://svn.code.sf.net/p/xiaoting/game/trunk/MyProject/AL_StandardLib/groupinc/AL_String.h 69 2013-10-08 03:03:33Z xiaoting $
 */
#ifndef CXX_AL_STRING_H
#define CXX_AL_STRING_H

///////////////////////////////////////////////////////////////////////////
//			AL_String
///////////////////////////////////////////////////////////////////////////
class AL_String
{
public:
	/**
	* Construction
	*
	* @param
	* @return
	*/
	AL_String();

	/**
	* Construction
	*
	* @param const NCHAR* str
	* @return
	*/
	AL_String(const NCHAR* str);

	/**
	* Destruction
	*
	* @param
	* @return
	*/
	~AL_String();
	
	/**
	*Copy Construct
	*
	* @param const AL_String& cAL_String
	* @return
	*/
	AL_String(const AL_String& cAL_String);

	/**
	*Length
	*
	* @param
	* @return DWORD
	*/
	DWORD Length() const;

	/**
	*Add
	*
	* @param const NCHAR* ncpChar 
	* @return VOID
	*/
	VOID Add(const NCHAR* ncpChar);

	/**
	*Add
	*
	* @param const AL_String& cAL_String
	* @return VOID 
	*/
	VOID Add(const AL_String& cAL_String);

	/**
	*GetString
	*
	* @param VOID
	* @return const NCHAR* 
	*/
	const NCHAR* GetString(VOID) const;

	/**
	*Assignment
	*
	* @param const AL_String& cAL_String
	* @return AL_String&
	*/
	AL_String& operator = (const AL_String& cAL_String);

	/**
	*Overloaded Operators +
	*
	* @param const AL_String& cAL_String
	* @return AL_String
	*/
	AL_String operator + (const AL_String& cAL_String) const;

	/**
	*Overloaded Operators +=
	*
	* @param const NCHAR* ncpChar
	* @return AL_String&
	*/
	AL_String& operator += (const NCHAR* ncpChar);

	/**
	*Overloaded Operators +=
	*
	* @param const AL_String& cAL_String
	* @return AL_String&
	*/
	AL_String& operator += (const AL_String& cAL_String);

	/**
	*Overloaded Operators ==
	*
	* @param const NCHAR* ncpChar
	* @return BOOL	
	*/
	BOOL operator == (const NCHAR* ncpChar) const;

	/**
	*Overloaded Operators ==
	*
	* @param const AL_String& cAL_String
	* @return BOOL	
	*/
	BOOL operator == (const AL_String& cAL_String) const;
	
	/**
	*Overloaded Operators !=
	*
	* @param const NCHAR* ncpChar
	* @return BOOL
	*/
	BOOL operator != (const NCHAR* ncpChar) const;

	/**
	*Overloaded Operators !=
	*
	* @param const AL_String& cAL_String
	* @return BOOL
	*/
	BOOL operator != (const AL_String& cAL_String) const;

	/**
	*Overloaded Operators <
	*
	* @param const NCHAR* ncpChar
	* @return BOOL
	*/
	BOOL operator < (const NCHAR* ncpChar) const;

	/**
	*Overloaded Operators <
	*
	* @param const AL_String& cAL_String
	* @return BOOL
	*/
	BOOL operator < (const AL_String& cAL_String) const;

	/**
	*Overloaded Operators >
	*
	* @param const NCHAR* ncpChar
	* @return BOOL
	*/
	BOOL operator > (const NCHAR* ncpChar) const;

	/**
	*Overloaded Operators >
	*
	* @param const AL_String& cAL_String
	* @return BOOL
	*/
	BOOL operator > (const AL_String& cAL_String) const;

	/**
	*Overloaded Operators <=
	*
	* @param const NCHAR* ncpChar
	* @return BOOL
	*/
	BOOL operator <= (const NCHAR* ncpChar) const;

	/**
	*Overloaded Operators <=
	*
	* @param const AL_String& cAL_String
	* @return BOOL
	*/
	BOOL operator <= (const AL_String& cAL_String) const;

	/**
	*Overloaded Operators >=
	*
	* @param const NCHAR* ncpChar
	* @return BOOL
	*/
	BOOL operator >= (const NCHAR* ncpChar) const;

	/**
	*Overloaded Operators >=
	*
	* @param const AL_String& cAL_String
	* @return BOOL
	*/
	BOOL operator >= (const AL_String& cAL_String) const;

	/**
	*Overloaded Operators []
	*
	* @param const AL_String& cAL_String
	* @return NCHAR
	*/
	NCHAR operator[](DWORD dwIndex) const;


protected:
private:

public:
protected:
private: 
	NCHAR*		m_pcData; // save the data

};
#endif // CXX_AL_STRING_H
/* EOF */
